(define (fast-multi x y)
  (define (double k) (+ k k))
  (define (halve k) (/ k 2))
  (define (multi-iter sum a b)
    (cond ((= b 0) sum)
          ((even? b) (multi-iter sum (double a) (halve b)))
          (else (multi-iter (+ sum a) a (- b 1)))))
  (cond ((or (= x 0) (= y 0)) 0)
        (else (multi-iter 0 x y))))
